package com.imooc.service;

import com.imooc.pojo.Items;
import com.imooc.pojo.ItemsImg;
import com.imooc.pojo.ItemsParam;
import com.imooc.pojo.ItemsSpec;
import com.imooc.pojo.vo.CommentLevelCountsVO;
import com.imooc.pojo.vo.ShopcartVO;
import com.imooc.utils.PagedGridResult;

import java.util.List;

/**
 * 商品接口
 */
public interface ItemService {

    /**
     * 获取商品详情
     *
     * @param itemId
     * @return
     */
    Items getById(String itemId);

    /**
     * 获取商品参数
     *
     * @param itemId
     * @return
     */
    ItemsParam getByItemId(String itemId);

    /**
     * 获取商品规格（一对多）
     *
     * @param itemId
     * @return
     */
    List<ItemsSpec> getItemsSpecsByItemId(String itemId);

    /**
     * 获取商品图片（一对多）
     *
     * @param itemId
     * @return
     */
    List<ItemsImg> getItemsImgListByItemId(String itemId);

    /**
     * 获取评价等级
     *
     * @param itemId
     * @return
     */
    CommentLevelCountsVO getCommentCount(String itemId);

    /**
     * 评论等级分页
     *
     * @param itemsId      商品id
     * @param commentLevel 评论等级
     * @param page         第几页
     * @param pageSize     该页有多少页数
     * @return
     */
    PagedGridResult listPageItemsComments(String itemsId, Integer commentLevel, Integer page, Integer pageSize);

    /**
     * 获取商品分页
     *
     * @param keywords 关键字搜索
     * @param sort     排序字段
     * @param page     第几页
     * @param pageSize 该页有多少页数
     * @return
     */
    PagedGridResult searchListPageItems(String keywords, String sort, Integer page, Integer pageSize);

    /**
     * 通过分类id获取商品数据
     *
     * @param catId    三级分类id
     * @param sort     排序字段
     * @param page     第几页
     * @param pageSize 该页有多少页数
     * @return
     */
    PagedGridResult searchListPageByCatId(Integer catId, String sort, Integer page, Integer pageSize);

    /**
     * 根据规格ids查询最新的购物车中商品数据（用于刷新渲染购物车中的商品数据）
     *
     * @param specIds 规格ids
     * @return
     */
    List<ShopcartVO> queryItemsBySpecIds(String specIds);

    /**
     * 根据 根据规格id获取规格数据
     *
     * @param specId 规格id
     * @return 取规格数据
     */
    ItemsSpec getItemsSpecsBySpecId(String specId);

    /**
     * 根据itemId获取主图
     *
     * @param itemId 商品id
     * @return 主图链接
     */
    String queryItemMainImgById(String itemId);

    /**
     * 扣库存
     *
     * @param specId
     * @param buyCounts
     */
    void decreaseItemSpecStock(String specId, Integer buyCounts);

}
